package cn.lll.vuehouse.utils;


import com.auth0.jwt.JWT;
import com.auth0.jwt.algorithms.Algorithm;

import java.util.Calendar;
import java.util.Map;

/*生成  验证  解析   token
*
* 客户端使用用户名跟密码请求登录
服务端收到请求，去验证用户名与密码
验证成功后，服务端会签发一个 Token，再把这个 Token 发送给客户端
客户端收到 Token 以后可以把它存储起来，比如放在 Cookie 里或者 Local Storage 里
客户端每次向服务端请求资源的时候需要带着服务端签发的 Token
服务端收到请求，然后去验证客户端请求里面带着的 Token，如果验证成功，就向客户端返回请求的数据
*
*
* */
public class JWTUtil {

    //密钥
    private static String secret = "lilhan";

    //token生命周期
    private static Integer expire = 7;


    //生成
    public  static String createToken(Map<String,Object> map){
        Calendar instance = Calendar.getInstance();
        instance.add(Calendar.DATE,expire);
        return   JWT.create().withClaim("userInfo",map)
                .withExpiresAt(instance.getTime())
                .sign(Algorithm.HMAC256(secret));
    }

    //解析token
    public  static Map<String,Object> getClaim(String token){
        //解析token
        return JWT.decode(token).getClaim("userInfo").asMap();
    }
    //验证token形象
    public static boolean veifyToken(String token){
        JWT.require(Algorithm.HMAC256(secret)).build().verify(token);
    return true;
    }

}
